<?php


namespace App\backend\services;


use App\backend\models\AgentLevel;
use App\Exceptions\InvalidRequestException;
use Illuminate\Http\Request;

class AgentLevelServices
{

    /**
     * 分销商等级列表
     */
    public function agentLevelLists($request)
    {
        $select_data = [
            'id', // id
            'name', // 分销商等级名
            'level', // 分销商等级权重
            'first_level', // 一级分销比例
            'second_level', // 二级分销比例
            'upgrade_strategy', // 升级策略
            'fall_strategy', // 降级策略条件
            'upgraded', // 等级说明
            'status', // 是否禁用
            'is_reduce', // 降级策略
            'degradation_policy_settings', // 降级策略设置
            'fall_strategy_time', // 降级策略时间
            'grade_protection_period', // 等级保护期
            'fall_level', // 分销商降级级数
            'after_demotion', // 降级后升级条件
            'downgrading_time', // 保持降级时间
            'downgrading_method', // 降级方式
            'downgrading_method_time', // 降级方式天数
        ];
        $list = AgentLevel::lists($request['page']??1,$request['limit']??10, $select_data);
        return $list;
    }

    /**
     * 分销商等级详情
     */
    public function agentLevelDetail($id){
        $select_data = [
            'id', // id
            'name', // 分销商等级名
            'level', // 分销商等级权重
            'first_level', // 一级分销比例
            'second_level', // 二级分销比例
            'upgrade_strategy', // 升级策略
            'fall_strategy', // 降级策略条件
            'upgraded', // 等级说明
            'status', // 是否禁用
            'is_reduce', // 降级策略
            'degradation_policy_settings', // 降级策略设置
            'fall_strategy_time', // 降级策略时间
            'grade_protection_period', // 等级保护期
            'fall_level', // 分销商降级级数
            'after_demotion', // 降级后升级条件
            'downgrading_time', // 保持降级时间
            'downgrading_method', // 降级方式
            'downgrading_method_time', // 降级方式天数
        ];
        $list = AgentLevel::info(['id' => $id], $select_data);
        if (empty($list)) {
            throw new InvalidRequestException(10009);
        }
        return $list;
    }

    /**
     * 分销商等级添加
     */
    public function addAgentLevel($request)
    {
        $data = [
            'name' => $request['name'], // 分销商等级名
            'level' => $request['level'], // 分销商等级权重
            'first_level' => $request['first_level'], // 一级分销比例
            'second_level' => $request['second_level'], // 二级分销比例
            'upgraded' => $request['upgraded'],//等级说明
            'upgrade_strategy' => $request['upgrade_strategy'], //升级策略
            'is_reduce' => $request['is_reduce'], // 降级策略
            'fall_strategy' => $request['fall_strategy'], // 降级策略条件
            'created_at' => time(),
            'updated_at' => time(),
            'degradation_policy_settings' => $request['degradation_policy_settings'], // 降级策略设置
            'fall_strategy_time' => strtotime($request['fall_strategy_time']), // 降级策略时间
            'grade_protection_period' => $request['grade_protection_period'], // 等级保护期
            'fall_level' => $request['fall_level'], // 分销商降级级数
            'after_demotion' => $request['after_demotion'], // 降级后升级条件
            'downgrading_time' => $request['downgrading_time'], // 保持降级时间
            'downgrading_method' => $request['downgrading_method'], // 降级方式
            'downgrading_method_time' => $request['downgrading_method_time'], // 降级方式天数
        ];
        $list = AgentLevel::insertData($data);
        return $list;
    }

    /**
     * 分销商等级删除
     */
    public function deleteAgentLevel($request)
    {
        $list = AgentLevel::info(['id' => $request['id']]);
        if (empty($list)) {
            throw new InvalidRequestException(10009);
        }
        $list = AgentLevel::deleteAgentLevel(['id' => $request['id']]);
        return $list;
    }


    /**
     * 分销商等级修改
     */
    public function editAgentLevel($request)
    {
        $select_data = [
            'name', // 分销商等级名
            'level', // 分销商等级权重
            'first_level', // 一级分销比例
            'second_level', // 二级分销比例
            'upgraded', // 等级说明
            'upgrade_strategy', // 升级策略
            'is_reduce', // 降级策略
        ];
        $data = [
            'name' => $request['name'], // 分销商等级名
            'level' => $request['level'], // 分销商等级权重
            'first_level' => $request['first_level'], // 一级分销比例
            'second_level' => $request['second_level'], // 二级分销比例
            'upgraded' => $request['upgraded'],//等级说明
            'upgrade_strategy' => $request['upgrade_strategy'], //升级策略
            'is_reduce' => $request['is_reduce'], // 降级策略
            'fall_strategy' => $request['fall_strategy'], // 降级策略条件
            'updated_at' => time(),
            'degradation_policy_settings' => $request['degradation_policy_settings'], // 降级策略设置
            'fall_strategy_time' => strtotime($request['fall_strategy_time']), // 降级策略时间
            'grade_protection_period' => $request['grade_protection_period'], // 等级保护期
            'fall_level' => $request['fall_level'], // 分销商降级级数
            'after_demotion' => $request['after_demotion'], // 降级后升级条件
            'downgrading_time' => $request['downgrading_time'], // 保持降级时间
            'downgrading_method' => $request['downgrading_method'], // 降级方式
            'downgrading_method_time' => $request['downgrading_method_time'], // 降级方式天数
        ];
        $where_data = ['id' => $request['id']];
        $list = AgentLevel::info($where_data,$select_data);
        if (empty($list)) {
            throw new InvalidRequestException(10009);
        }
        $list = AgentLevel::updatedData($where_data,$data);
        return $list;
    }

    /**
     * 分销商等级启用
     */
    public function setLevelStatus($request)
    {
        $select_data = [
            'name', // 分销商等级名
            'level', // 分销商等级权重
            'first_level', // 一级分销比例
            'second_level', // 二级分销比例
            'upgraded', // 等级说明
            'upgrade_strategy', // 升级策略
            'is_reduce', // 降级策略
            'status', // 状态
        ];
        $where_data = ['id' => $request['id']];
        $list = AgentLevel::info($where_data,$select_data);
        if (empty($list)) {
            throw new InvalidRequestException(10009);
        }
        if ($list->status == 0){
            $data = [
                'status' => 1,
            ];
        }
        if ($list->status == 1){
            $data = [
                'status' => 0,
            ];
        }
        $list = AgentLevel::updatedData($where_data,$data);
        return $list;
    }
}
